/******************************************************************************
  文 件 名   : db_sqlite3.h
  版 本 号   : 初稿
  作    者   : thomas
  生成日期   : 2020年6月11日
  最近修改   :
  功能描述   : db_sqlite3.c 的头文件
  函数列表   :
  修改历史   :
  1.日    期   : 2020年6月11日
    作    者   : thomas
    修改内容   : 创建文件

******************************************************************************/
#ifndef __DB_SQLITE3_H__
#define __DB_SQLITE3_H__


#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif
#endif /* __cplusplus */

#include <sqlite3.h>
#include <stdbool.h>

#define DB_INTEGRITY_OK         800     /*完整性检查通过*/
#define DB_INTEGRITY_ERROR      801     /*完整性检查失败*/
#define DB_INTEGRITY_UNKNOW     802     /*完整性检查未知状态*/
#define DB_ERROR_SYSCALL        803     /*系统调用错误*/
#define DB_ERROR_UNSAFE         804     /*sqlite库非线程安全*/
#define DB_ERROR_LIBINIT        805     /*库初始化错误*/
#define DB_ERROR_INVALID        806     /*非法参数*/

typedef int (*sqliteExecallback)(void *, int, char **, char **);

typedef int (*sqliteSelectcallback)(int, int, char **, void *);

typedef struct sqlite3db
{
    sqlite3 *db;
    bool modified;
} sqlite3db_ts;

extern int sqldb_open(const char *filename, const char *bakfile, sqlite3 **pmemdb);

extern int sqldb_close(sqlite3 *db);

extern int sqldb_recover(sqlite3 *db, const char *bakfile);

extern int sqldb_load(sqlite3 *db, const char *dbfile, const char *bakfile);

extern int sqldb_save(sqlite3 *db, const char *dbfile, const char *bakfile);

extern int sqldb_slim(sqlite3 *db, const char *tablename);

extern int sqldb_create_table(sqlite3 *db, const char *tablename, const char *declarelist);

extern int sqldb_drop_table(sqlite3 *db, const char *tablename);

extern int sqldb_exec_restrain_batch(sqlite3 *db, const char *sql);

extern int sqldb_transaction_begin(sqlite3 *db);

extern int sqldb_transaction_commit(sqlite3 *db);

extern int sqldb_insert(sqlite3 *db, const char *tablename, const char *columnlist, const char *valuelist);

extern int sqldb_replace(sqlite3 *db, const char *tablename, const char *columnlist, const char *valuelist);

extern int sqldb_delete(sqlite3 *db, const char *tablename, const char *conditions, sqliteExecallback callback);

extern int sqldb_update(sqlite3 *db, const char *tablename, const char *expressions, const char *conditions,
                        sqliteExecallback callback);

extern int sqldb_select(sqlite3 *db, const char *columnlist, const char *tablename, const char *conditions,
                        sqliteSelectcallback callback, void *args);

#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif /* __cplusplus */


#endif /* __DB_SQLITE3_H__ */
